package net.dgitc.xingyannian.util;

/**
 * IdCardEncryptor
 *
 * @author XING&WANG
 * @version 2024/08/27 00:40
 **/
public class IdCardEncryptor {
    /**
     * 加密身份证号，将出生日期替换为******
     *
     * @param idCard 原始身份证号
     * @return 加密后的身份证号
     */
    public static String encryptIdCard(String idCard) {
        // 校验参数
        if (idCard == null || idCard.isBlank()) {
            return "空";
        }
        // 检查身份证号长度是否为18位
        if (idCard.length() != 18) {
            // 如果身份证号长度不为18位，则只显示前一半信息，后一半信息使用*替换
            var halfLength = idCard.length() / 2;
            //如果halflength为不是int类型，则使用强制转换为int类型，进行向下取整
            if (idCard.length() % 2 != 0) {
                halfLength = (int) halfLength;
                return idCard.substring(0, halfLength) + "*".repeat(halfLength + 1);
            }
            // 使用repeat()方法来生成*
            return idCard.substring(0, halfLength) + "*".repeat(halfLength);
        }

        // 替换出生日期部分（第7位到第14位）为******
        // 注意：Java中字符串是不可变的，因此这里使用StringBuilder或String.substring()和+来构建新字符串
        StringBuilder encryptedIdCard = new StringBuilder(idCard);
        encryptedIdCard.replace(6, 14, "******");

        // 或者使用String.substring()和+操作符（但这种方式在性能上可能不如StringBuilder）
        // String encryptedIdCard = idCard.substring(0, 6) + "******" + idCard.substring(14);

        return encryptedIdCard.toString();
    }
}
